package Interfaz;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.Box.Filler;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.JTableHeader;

import models.Empleados;
import models.Roles;

import org.hibernate.Session;
import org.hibernate.Transaction;

import connection.HibernateUtil;

public class RolesWindow extends JFrame {
	private static final long serialVersionUID = -5390046691418510566L;
	Empleados empleado;
	Session DAO;
	Transaction tx;
	JLabel actionBar;
	JLabel marcoUser;
	JLabel logoSmall;
	JLabel nombreUsuario;
	String[] cols = {"Nombre de Rol"};
	JTable table;
	JTableHeader header;
	JScrollPane scroll;
	List<Roles> roles;
	JLabel rolNameLbl = new JLabel("Nombre del rol: ");
	JTextField rolNameTxt;
	JCheckBox pAjustesBox;
	JCheckBox pEmpleadosBox;
	JCheckBox pClientesBox;
	JCheckBox pReservasBox;
	JCheckBox pAccesoriosBox;
	JCheckBox pAlmacenBox;
	JCheckBox pLogrosBox;
	JCheckBox pFinanzasBox;
	JCheckBox pMultipistaBox;
	int idSeleccionado;
	boolean esNuevo = true;

	JButton saveBtn;
	JButton deleteBtn;
	JButton nuevoBtn;
	
	public RolesWindow(Empleados empleado) {
		this.empleado = empleado;
		DAO = HibernateUtil.configureSessionFactory().getCurrentSession();
		tx = DAO.beginTransaction();
		initJFramecomponents();
		addListeners();
	}

	public void initJFramecomponents() {
		JPanel panel = new JPanel();
		actionBar = new JLabel();
		marcoUser = new JLabel();
		logoSmall = new JLabel(new ImageIcon(getClass().getResource(
				"raw/logo_small.jpg")));
		nombreUsuario = new JLabel("Gestion de Roles");
		
		pAjustesBox = new JCheckBox("Ajustes");
		pEmpleadosBox = new JCheckBox("Empleados");
		pClientesBox = new JCheckBox("Clientes");
		pReservasBox = new JCheckBox("Reservas");
		pAccesoriosBox = new JCheckBox("Accesorios");
		pAlmacenBox = new JCheckBox("Almacen");
		pLogrosBox = new JCheckBox("Logros");
		pFinanzasBox = new JCheckBox("Finanzas");
		pMultipistaBox = new JCheckBox("MultiPista");
		rolNameTxt = new JTextField();
		
		saveBtn = new JButton();
		deleteBtn = new JButton();
		nuevoBtn = new JButton();
		// Instanciar declaraciones END//
		// Asignar propiedades
		inflateList();
		actionBar.setBackground(Color.BLACK);
		actionBar.setForeground(Color.BLACK);
		actionBar.setBounds(0, 0, 800, 32);
		actionBar.setOpaque(true);

		marcoUser.setBackground(new Color(0xEEEEEE));
		marcoUser.setForeground(new Color(0xEEEEEE));
		marcoUser.setBounds(32, 10, 98, 98);
		marcoUser.setOpaque(true);

		logoSmall.setBounds(36, 14, 90, 90);

		nombreUsuario.setBounds(150, 3, 256, 25);
		nombreUsuario.setForeground(Color.WHITE);
		nombreUsuario.setFont(new Font("Serif", Font.BOLD, 18));
		
		rolNameLbl.setBounds(200, 180, 180, 18);
		rolNameTxt.setBounds(340, 180, 250, 18);

		pAjustesBox.setBackground(Color.WHITE);
		pAjustesBox.setBounds(200,240,100,25);
		pEmpleadosBox.setBackground(Color.WHITE);
		pEmpleadosBox.setBounds(300,240,100,25);
		pClientesBox.setBackground(Color.WHITE);
		pClientesBox.setBounds(400,240,100,25);
		pReservasBox.setBackground(Color.WHITE);
		pReservasBox.setBounds(500,240,100,25);
		pAccesoriosBox.setBackground(Color.WHITE);
		pAccesoriosBox.setBounds(600,240,100,25);
		pAlmacenBox.setBackground(Color.WHITE);
		pAlmacenBox.setBounds(700,240,100,25);
		pLogrosBox.setBackground(Color.WHITE);
		pLogrosBox.setBounds(200,300,100,25);
		pFinanzasBox.setBackground(Color.WHITE);
		pFinanzasBox.setBounds(300,300,100,25);
		pMultipistaBox.setBackground(Color.WHITE);
		pMultipistaBox.setBounds(400,300,100,25);
		
		saveBtn.setBackground(Color.WHITE);
		saveBtn.setBorder(null);
		saveBtn.setForeground(Color.WHITE);
		saveBtn.setIcon(new ImageIcon(getClass().getResource("raw/guardar.png")));
		saveBtn.setBounds(350, 500, 48, 48);
		
		deleteBtn.setBackground(Color.WHITE);
		deleteBtn.setBorder(null);
		deleteBtn.setForeground(Color.WHITE);
		deleteBtn.setIcon(new ImageIcon(getClass().getResource("raw/borrar.png")));
		deleteBtn.setBounds(550, 500, 48, 48);
		
		nuevoBtn.setBackground(Color.WHITE);
		nuevoBtn.setBorder(null);
		nuevoBtn.setForeground(Color.WHITE);
		nuevoBtn.setIcon(new ImageIcon(getClass().getResource("raw/nuevo.png")));
		nuevoBtn.setBounds(450, 500, 48, 48);
		//Asignar propiedades END//
		//Agregar componentes a la interfaz
		this.add(nuevoBtn);
		this.add(deleteBtn);
		this.add(saveBtn);
		this.add(pEmpleadosBox);
		this.add(pClientesBox);
		this.add(pReservasBox);
		this.add(pAccesoriosBox);
		this.add(pAlmacenBox);
		this.add(pLogrosBox);
		this.add(pMultipistaBox);
		this.add(pFinanzasBox);
		this.add(rolNameLbl);
		this.add(rolNameTxt);
		this.add(pAjustesBox);
		this.add(nombreUsuario);
		this.add(marcoUser);
		this.add(logoSmall);
		this.add(actionBar);
		//Agregar componentes a la interfaz END//
		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		this.setBounds(((d.width / 2) - 400), ((d.height / 2) - 300), 800, 600);
		panel.setBackground(Color.WHITE);
		this.setTitle("MyBolos ERP  ->  " + empleado.getNombre() + " "
				+ empleado.getApellido1());
		this.add(panel);
		this.setBackground(Color.WHITE);
		this.setVisible(true);
		this.setResizable(false);
	}
	public void addListeners(){
		saveBtn.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				if(!esNuevo){
					roles.get(idSeleccionado).setNombre(rolNameTxt.getText());
					roles.get(idSeleccionado).setPAccesorios((byte)0);
					roles.get(idSeleccionado).setPAjustes((byte)0);
					roles.get(idSeleccionado).setPAlmacen((byte)0);
					roles.get(idSeleccionado).setPClientes((byte)0);
					roles.get(idSeleccionado).setPEmpleados((byte)0);
					roles.get(idSeleccionado).setPFinanzas((byte)0);
					roles.get(idSeleccionado).setPLogros((byte)0);
					roles.get(idSeleccionado).setPMultipista((byte)0);
					roles.get(idSeleccionado).setPReservas((byte)0);
					if(pAccesoriosBox.isSelected())roles.get(idSeleccionado).setPAccesorios((byte)1);
					if(pAjustesBox.isSelected())roles.get(idSeleccionado).setPAjustes((byte)1);
					if(pAlmacenBox.isSelected())roles.get(idSeleccionado).setPAlmacen((byte)1);
					if(pClientesBox.isSelected())roles.get(idSeleccionado).setPClientes((byte)1);
					if(pEmpleadosBox.isSelected())roles.get(idSeleccionado).setPEmpleados((byte)1);
					if(pFinanzasBox.isSelected())roles.get(idSeleccionado).setPFinanzas((byte)1);
					if(pLogrosBox.isSelected())roles.get(idSeleccionado).setPLogros((byte)1);
					if(pMultipistaBox.isSelected())roles.get(idSeleccionado).setPMultipista((byte)1);
					if(pReservasBox.isSelected())roles.get(idSeleccionado).setPReservas((byte)1);
					DAO.saveOrUpdate(roles.get(idSeleccionado));
					tx.commit();
				}else{
					Roles newRol = new Roles();
					newRol.setNombre(rolNameTxt.getText());
					newRol.setPAccesorios((byte)0);
					newRol.setPAjustes((byte)0);
					newRol.setPAlmacen((byte)0);
					newRol.setPClientes((byte)0);
					newRol.setPEmpleados((byte)0);
					newRol.setPFinanzas((byte)0);
					newRol.setPLogros((byte)0);
					newRol.setPMultipista((byte)0);
					newRol.setPReservas((byte)0);
					if(pAccesoriosBox.isSelected())newRol.setPAccesorios((byte)1);
					if(pAjustesBox.isSelected())newRol.setPAjustes((byte)1);
					if(pAlmacenBox.isSelected())newRol.setPAlmacen((byte)1);
					if(pClientesBox.isSelected())newRol.setPClientes((byte)1);
					if(pEmpleadosBox.isSelected())newRol.setPEmpleados((byte)1);
					if(pFinanzasBox.isSelected())newRol.setPFinanzas((byte)1);
					if(pLogrosBox.isSelected())newRol.setPLogros((byte)1);
					if(pMultipistaBox.isSelected())newRol.setPMultipista((byte)1);
					if(pReservasBox.isSelected())newRol.setPReservas((byte)1);
					DAO.saveOrUpdate(newRol);
					tx.commit();
				}
				inflateList();
				esNuevo = false;
			}
		});
		nuevoBtn.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent arg0) {
				// Limpiar los datos
				rolNameTxt.setText("");
				pAccesoriosBox.setSelected(false);
				pAjustesBox.setSelected(false);
				pAlmacenBox.setSelected(false);
				pClientesBox.setSelected(false);
				pEmpleadosBox.setSelected(false);
				pFinanzasBox.setSelected(false);
				pLogrosBox.setSelected(false);
				pMultipistaBox.setSelected(false);
				pReservasBox.setSelected(false);
				esNuevo = true;
				// Limpiar los datos END//
			}
		});
		deleteBtn.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				DAO.delete(roles.get(idSeleccionado));
				tx.commit();
				inflateList();
			}
		});
	}
	public void inflateList(){
		DAO = HibernateUtil.configureSessionFactory().getCurrentSession();
		tx = DAO.beginTransaction();
		roles = DAO.createQuery("FROM Roles").list();
		String[][] nombres = new String[roles.size()][1];
		for (int i = 0; i < roles.size(); i++) {
			nombres[i][0] = roles.get(i).getNombre();
		}
		table = new JTable(nombres, cols);
		header = table.getTableHeader();
		header.setBackground(Color.GRAY);
		header.setForeground(Color.WHITE);
		table.setBackground(Color.WHITE);
		table.setBorder(null);
		scroll = new JScrollPane(table);
		scroll.setBackground(Color.WHITE);
		scroll.setForeground(Color.WHITE);
		scroll.setBorder(null);
		table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
		scroll.setBounds(0, 150, 150, 450);
		this.add(scroll);
		
		table.getSelectionModel().addListSelectionListener(
				new ListSelectionListener() {

					public void valueChanged(ListSelectionEvent arg0) {
						// TODO Auto-generated method stub
						populateFastView(table.getSelectedRow());
					}
				});
		// Agregar el Listener a la tabla END//
	}
	public void populateFastView(int id){
		esNuevo = false;
		idSeleccionado = id;
		rolNameTxt.setText(roles.get(id).getNombre());
		if(roles.get(id).getPAccesorios()==1)pAccesoriosBox.setSelected(true);
		if(roles.get(id).getPAjustes()==1)pAjustesBox.setSelected(true);
		if(roles.get(id).getPAlmacen()==1)pAlmacenBox.setSelected(true);
		if(roles.get(id).getPClientes()==1)pClientesBox.setSelected(true);
		if(roles.get(id).getPEmpleados()==1)pEmpleadosBox.setSelected(true);
		if(roles.get(id).getPFinanzas()==1)pFinanzasBox.setSelected(true);
		if(roles.get(id).getPLogros()==1)pLogrosBox.setSelected(true);
		if(roles.get(id).getPMultipista()==1)pMultipistaBox.setSelected(true);
		if(roles.get(id).getPReservas()==1)pReservasBox.setSelected(true);
	}
}